package demo;
import com.kayak.enve.EnvApplication;
import com.kayak.sign.CertUtil;
import com.kayak.sign.KKAES2;
import com.kayak.sign.SignVer;
public class Demo {
	// 示例
	public static void main(String[] args) throws Exception {
		//商户私钥
		String skey = "D:/kayak.jks";
		//商户私钥密码
		String password = "123456";
		//银行公钥证书
		String hxkey = "D:/hxpay.cer";
		EnvApplication envApplication = new EnvApplication();
		String cert = envApplication.getCert(hxkey);
		//CA根证书
		String CAkey = "D:/hxca.cer";
		//-------------------------------------------
		//解析求情报文
		//报文密文 body内容
		String sbody = "xxxxbody";
		//签名 signature内容
		String signed = "xxxxsign";
		//校验证书合法性
		CertUtil.verifyCA(CAkey, hxkey);
		//1 解密：商户使用自己的私钥进行解密
		// 参数说明：(1)商户私钥(jks文件)；(2)密钥口令；(3)待解密内容(请求body内容)
		byte[] decryption = envApplication.openEnvelope(skey, password, sbody);
		String body = new String(decryption, "utf-8");
		System.out.println("数字信封解密结果:" + body);
		//2 验签:商户使用综合支付的公钥验签
		// 参数说明：(1)原文(请求body内容)；(2)待验签数据(signature内容)；(3)综合支付的公钥
		boolean doCheck = SignVer.verifyJson(body, signed, hxkey);
		System.out.println("验签结果:" + doCheck);
		//3 商户 业务处理
		// body明文json串
		String retBody = "xxx";
		//4 签名:商户使用自己的私钥签名
		// 参数说明：(1)待签名数据(响应body内容)；(2)商户的私钥；(3)密钥口令；
		String retSigned = SignVer.signJson(retBody, skey, password);
		System.out.println("签名数据:" + retSigned);
		//5 加密:商户使用综合支付的公钥进行加密
		// 参数说明：(1)银行公钥证书；(2)对称算法AES(固定)；(3)待加密内容
		String sRetBody = envApplication.makeEnvelope(cert, KKAES2.AES, retBody.getBytes("UTF-8"));
		System.out.println("数字信封加密结果:" + sRetBody);
		//6 返回报文
		//{"version":"1.0","appid":"xx","signature":"retSigned", "body":"sRetBody"}
	}
}
